package com.dmx.fw.util;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.googlecode.jsonplugin.JSONException;
import com.googlecode.jsonplugin.JSONUtil;

/**
 * 字符串工具类
 * 
 * @author 沙北平
 * @date 2009年6月5日14:50:27
 */
public class StrTools {

	private static final String LINK = "-";

	/** 日志记录对象 */
	private static Log logger = LogFactory.getLog(StrTools.class);

	/**
	 * 判断字符串是否为空
	 * 
	 * @param str
	 *            要判别的字符串
	 * @return 在字符串为空对象或值为null、空时返回true
	 */
	public static boolean isBlank(String str) {
		if (str == null)
			return true;
		str = str.trim();
		if (str.equalsIgnoreCase(""))
			return true;
		if (str.equalsIgnoreCase("null"))
			return true;
		return false;
	}

	/**
	 * 判断字符串是否不为空
	 * 
	 * @param args
	 *            参数接收为数组
	 * @return 在所有字符串不为空对象或值不为null、不为空时返回true
	 */
	public static boolean isNotBlank(String... args) {
		if (args != null && args.length > 0) {
			for (int i = 0; i < args.length; i++) {
				if (isBlank(args[i]))
					return false;
			}
			return true;
		}
		return false;
	}

	/**
	 * 设置字符串编码格式
	 * 
	 * @param str
	 * @param from
	 * @param to
	 * @return
	 */
	public static String charsetFormat(String str, String from, String to) {
		if (isNotBlank(str, from, to)) {
			byte[] bytes = null;
			try {
				bytes = str.getBytes(from);
				if (bytes != null) {
					str = new String(bytes, to);
				}
			} catch (UnsupportedEncodingException e) {
				logger.error(e.getMessage(), e);
			}
		}
		return str;
	}
	
	/**
	 * 解码字符串编码格式
	 * 
	 * @param str
	 * @param to
	 * @return
	 */
	public static String charsetDecode(String str, String to) {
		if (isNotBlank(str,  to)) {
			try {
				str = URLDecoder.decode(str,to);
			} catch (UnsupportedEncodingException e) {
				logger.error(e.getMessage(), e);
			}
		}
		return str;
	}

	/**
	 * 格式化生日字符
	 * 
	 * @param year
	 *            年
	 * @param month
	 *            月
	 * @param day
	 *            日
	 * @return
	 */
	public static String birthdayFormat(String year, String month, String day) {
		String result = "0000-00-00";
		final String PRX = "0";
		if (isNotBlank(year, month, day)) {
			year = year.trim();
			month = month.trim();
			day = day.trim();
			/**
			 * 简单的验证规则，以后补全 2009年6月10日9:23:36
			 */
			/** 定义年的验证规则，必须为4个数字，并且第一个数字不能是0 */
			final String regexYear = "^(\\A[1-9])(\\d{3}+)$";
			/** 定义月的验证规则，必须为1个或2个数字，并且当只有1个数字时不能是0 */
			final String regexMonth = "^([1-9])|(\\d{2}+)$";
			/** 定义日的验证规则，必须为1个或2个数字，并且当只有1个数字时不能是0 */
			final String regexDay = "^([1-9])|(\\d{2}+)$";
			boolean bYear = Pattern.matches(regexYear, year);
			boolean bMonth = Pattern.matches(regexMonth, month);
			boolean bDay = Pattern.matches(regexDay, day);
			if (bYear && bMonth && bDay) {
				if (month.length() == 1)
					month = PRX + month;
				if (day.length() == 1)
					day = PRX + day;
				result = year + LINK + month + LINK + day;
			}
		}
		return result;
	}

	/**
	 * 分解生日字段，并且将年、月、日依次放置到数组中。
	 * 
	 * @param birthday
	 *            必须为：yyyy-mm-dd 的生日字段
	 * @return
	 */
	public static String[] splitBirthday(String birthday) {
		if (isNotBlank(birthday)) {
			birthday = birthday.trim();
			/** 判断是否是正确的生日格式 */
			final String regex = "^(\\d{4}+)-(\\d{2}+)-(\\d{2}+)$";
			boolean is = Pattern.matches(regex, birthday);
			if (is) {
				String[] strArray = birthday.split(LINK);
				if (strArray != null && strArray.length == 3)
					return strArray;
			}
		}
		return null;
	}

	/**
	 * 获得文件扩展名
	 * 
	 * @param fileName
	 *            文件名称
	 * @return
	 */
	public static String getExtention(String fileName) {
		int pos = fileName.lastIndexOf(".");
		return fileName.substring(pos).toUpperCase();
	}

	/**
	 * 清理空格
	 * 
	 * @param args
	 * @return
	 */
	public static String NullToStr(String args) {
		if (isNotBlank(args)) {
			return args.trim();
		}
		return "";
	}

	/**
	 * 获得当前时间的描述字符
	 * 
	 * @return
	 */
	public static String getCurrentDate() {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
		Date currentTime = new Date();
		return formatter.format(currentTime);
	}

	/**
	 * 将map转换为JSON数组
	 * 
	 * @param map
	 * @return
	 */
	public static String mapToJson(Map<?, ?> map) {
		String res = "null";
		try {
			res = JSONUtil.serialize(map);
		} catch (JSONException e) {
			logger.error(e.getMessage(), e);
		}
		return res;
	}
	
	/**
	 * 将map转换为JSON数组
	 * 
	 * @param map
	 * @return
	 */
	public static String listToJson(List<?> list) {
		String res = "null";
		try {
			res = JSONUtil.serialize(list);
		} catch (JSONException e) {
			logger.error(e.getMessage(), e);
		}
		return res;
	}

	/**
	 * 获得格式为 0,1,2,3 的最后一个数字
	 * 
	 * @param str
	 * @return
	 */
	public static String getlastID(String str) {
		if (isNotBlank(str)) {
			final String regex = ",";
			String[] array = str.split(regex);
			if (array != null) {
				for (int i = array.length - 1; i > -1; i--) {
					if (isNotBlank(array[i])) {
						return array[i];
					}
				}
			}
		}
		return null;
	}

	public static void main(String[] args) {
		// Map<String, String> map = new HashMap<String, String>();
		// for (int i = 0; i < 10; i++) {
		// map.put(new Integer(i).toString(), "天津市0" + i);
		// }
		// System.out.println(mapToJson(map));
		String s = "0,110000";
		System.out.println(getlastID(s));
	}
}
